package com.example.attendancesystem.Mapper;


import com.example.attendancesystem.Models.AftRow;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface AftRowMapper {

    /**
     * 查询所有下午打卡记录
     *
     * @return AftRow列表
     */
    @Select("select id,emp_number,emp_name,row_date,aft_on,on_state,aft_off,off_state from aft_row ")
    List<AftRow> getAllAftRow();

    /**
     * 按日期查询
     *
     * @param queryDate 查询日期
     * @return AftRow列表
     */
    @Select("select id,emp_number,emp_name,row_date,aft_on,on_state,aft_off,off_state from aft_row where row_date = #{queryDate}")
    List<AftRow> getAftRowByDate(@Param("queryDate") String queryDate);

    /**
     * 按日期和员工号查询
     *
     * @param queryDate 查询日期
     * @return AftRow列表
     */
    @Select("select id,emp_number,emp_name,row_date,aft_on,on_state,aft_off,off_state " +
            "from aft_row where emp_number = #{empNumber} AND row_date = #{queryDate}")
    AftRow getAftRowByEmpNumAndDate(@Param("empNumber") String empNumber, @Param("queryDate") String queryDate);

    /**
     * 插入一条 下午上班打卡记录
     *
     * @param empNumber 工号
     * @param empName   姓名
     * @param rowDate   当前日期
     * @param nowTime   当前时间
     * @param onState   状态
     * @return 受影响的记录条数
     */
    @Insert("insert into aft_row (emp_number,emp_name,row_date,aft_on,on_state) " +
            "values(#{empNumber},#{empName},#{rowDate},#{nowTime},#{onState})")
    int insertAftOnRow(
            @Param("empNumber") String empNumber,
            @Param("empName") String empName,
            @Param("rowDate") String rowDate,
            @Param("nowTime") String nowTime,
            @Param("onState") Integer onState);

    /**
     * 更新下午上班班打卡记录
     *
     * @param empNumber 员工号
     * @param rowDate   日期
     * @param nowTime   时间
     * @param onState   状态
     * @return 受影响的记录条数
     */
    @Update("update aft_row set aft_on = #{rowTime},on_state = #{onState} " +
            "where emp_number = #{empNumber} and row_date = #{rowDate}")
    int updateAftOnRow(
            @Param("empNumber") String empNumber,
            @Param("rowDate") String rowDate,
            @Param("rowTime") String nowTime,
            @Param("onState") Integer onState);

    /**
     * 插入一条 下午下班打卡记录
     *
     * @param empNumber 工号
     * @param empName   姓名
     * @param rowDate   时间
     * @param nowTime   状态
     * @param offState  受影响的记录条数
     * @return 受影响的记录条数
     */
    @Insert("insert into aft_row (emp_number,emp_name,row_date,aft_off,off_state) " +
            "values(#{empNumber},#{empName},#{rowDate},#{nowTime},#{offState})")
    int insertAftOffRow(
            @Param("empNumber") String empNumber,
            @Param("empName") String empName,
            @Param("rowDate") String rowDate,
            @Param("nowTime") String nowTime,
            @Param("offState") Integer offState);

    /**
     * 更新下午下班班打卡记录
     *
     * @param empNumber 员工号
     * @param rowDate   日期
     * @param nowTime   时间
     * @param offState  状态
     * @return 受影响的记录条数
     */
    @Update("update aft_row set aft_off = #{rowTime},off_state = #{offState} " +
            "where emp_number = #{empNumber} and row_date = #{rowDate}")
    int updateAftOffRow(
            @Param("empNumber") String empNumber,
            @Param("rowDate") String rowDate,
            @Param("rowTime") String nowTime,
            @Param("offState") Integer offState);


    @Select("select id,emp_number,emp_name,row_date,aft_on,on_state,aft_off,off_state " +
            "from aft_row where emp_number = #{empNumber } AND row_date like #{queryDate}")
    List<AftRow> getEmpAftRowByDate(@Param("empNumber") String empNumber, @Param("queryDate") String queryDate);
}
